#-*- coding: utf-8 -*-
'''
author : Bruno Rendeiro 11236  \
			& André Simão 6039
date : 23 de outubro de 2012
obs : 3 parte
'''
 

#fazer imports do wx, thread's e da parte2
import wx
import thread
import parte2

#cria as listas
listaAno=[ ]  #ano
listaIpc=[ ]  #ipc global
listaTaxa=[ ]  #taxa
listaMinimo=[ ]	#minimo
listaMaximo=[ ]	#maximo
listaPib=[ ]	#PIB
listaNacional=[ ]	#rendimento nacional
listaDisponivel=[ ]	#rendimento disponivel
listaRenumeracao=[ ]	#renumeracao
listaEvoMin=[ ]  #evolucao renumeracoes minimas
listaEvoMax=[ ]  #evolucao renumeracoes maximas

ID_EXIT = 110

class WindowClass(wx.Frame):
	
	def __init__(self,*args,**kwargs):
		
		super(WindowClass,self).__init__(*args,**kwargs)		
		self.basic_gui()	
		
	def basic_gui(self):
			
		panel = wx.Panel(self)	
		#cria o status bar e coloca o seu texto	
		self.CreateStatusBar()
		self.SetStatusText("LP1415")
		#cria o menu bar, e adiciona o file menu	
		menuBar=wx.MenuBar()
		fileMenu=wx.Menu()
		#coloca o exit intem no file menu, onde tem o texto, e o texto que aparece no status bar
		exitItem=fileMenu.Append(ID_EXIT,'Sair','Sair da App') 
		#e por fim adiicona o file menu ao menu bar
		menuBar.Append(fileMenu, '&File')
		self.SetPosition((100,200))		
		'''
		cria uma caixa de dialog onde pergunta o 
		Valor do ano do primeiro intervalo e coloca na variavel a
		e de seguida destroy a caixa de dialogo para desocupar espaço na memoria
		'''
		a=0
		while a >2012 or a <1977:
			anoDialog= wx.TextEntryDialog(None,'1977 a 2013','primeira data do intervalo desejada?','')
			if anoDialog.ShowModal()== wx.ID_OK:
				ano1=anoDialog.GetValue()
				a=int(ano1)	
			else:		
				Close()
		anoDialog.Destroy()
			
		'''
		cria uma caixa de dialog onde pergunta o 
		Valor do ano do segundo intervalo
		e de seguida destroy a caixa de dialogo para desocupar espaço na memoria
		'''
		b=0
		y=a+1
		y1=str(y)
		
		while b >2013 or b < y:	
			ano2Dialog= wx.TextEntryDialog(None,y1 +' a 2013','segunda data do intervalo desejada?','')
			if ano2Dialog.ShowModal()== wx.ID_OK:
				ano2=ano2Dialog.GetValue()
				b=int(ano2)		
			else:		
				Close()
		ano2Dialog.Destroy()	
					
		'''
		abre uma caixa de dialogo de confirmaçao se é ou nao este o intervalo que deseja
		se sim continua, se nao pede os anos de novo
		'''
		yesNoDialog = wx.MessageDialog(None,' intervalos de '+ ano1 +" a "+ ano2 + ' tem a certeza?', 'Confirmação', wx.YES_NO)
		yesNoAnswer=yesNoDialog.ShowModal()
		yesNoDialog.Destroy()
		if yesNoAnswer == wx.ID_NO:			
			main()
				

		#preenche as listas atraves da funcao preencher listas da parte 2 com o intervalo de ano desejado
		parte2.preencher_listas(a,b,listaAno,listaIpc,listaTaxa,listaMinimo,listaMaximo,listaPib,listaNacional,listaDisponivel,listaRenumeracao,listaEvoMin,listaEvoMax)
		#preenche valores nulos das listas atraves da fincao preencher nulos da parte 2
		parte2.preencher_nulos(listaAno,listaIpc,listaTaxa,listaMinimo,listaMaximo,listaPib,listaNacional,listaDisponivel,listaRenumeracao,listaEvoMin,listaEvoMax)
				
		'''
		aparece uma box para escolher o grafico que deseja
		Escolha da lista que deseja
		'''	
		chooseOneBox = wx.SingleChoiceDialog(None,"que estatistica deseja?", "Listas",["IPC Global", \
			"Taxa Inflacao","remuneracao minima mensal dos funcionarios","remuneracao maxima mensal dos funcionarios",\
			"evolucao das remuneracoes","(PIB) per capita", "rendimento nacional anual bruto per capita",\
			"rendimento disponivel anual bruto per capita", "remuneracoes per capita anuais"])
		#inicia a variavel estat com valor none, e depois com o nome da 
		#lista selecionada 
		estat= None
		if chooseOneBox.ShowModal() == wx.ID_OK:
			estat = chooseOneBox.GetStringSelection()			
		chooseOneBox.Destroy()
							
		#aqui  cria o grafico					
		def showEstatistica(lista1,lista2,name,xLabel,yLabel):
			'''
			Param:
				lista1 - list
				lista2 - list
				name - string
				xlabel - string
				ylabel - sting
			'''
			parte2.graf_recta(lista1,lista2,name,xLabel,yLabel)
			
		# vai escrever o resultado de todas as estatisticas	
		def showEstatistica1(lista1,lista2,name,xLabel,yLabel):
			'''
			Param:
				lista1 - list
				lista2 - list
				name - string
				xlabel - string
				ylabel - sting
			'''
			aweText=wx.StaticText(panel,-1, name,(3,10))
			aweText.SetForegroundColour('blue')
			aweText=wx.StaticText(panel,-1,"Media: %s" % ( parte2.media(lista2)),(3,25))
			aweText=wx.StaticText(panel,-1,"Variancia: %s" % ( parte2.variancia(lista2)),(3,40))
			aweText=wx.StaticText(panel,-1,"Desvio Medio: %s" % ( parte2.desvioMedio(lista2)),(3,55))
			aweText=wx.StaticText(panel,-1,"Desvio Padrao: %s" % ( parte2.desvioPadrao(lista2)),(3,70))
			aweText=wx.StaticText(panel,-1,"Coeficiente de variacao: %s" % ( parte2.variacao(lista2)),(3,85))		
		
		#cria o grafico quando sao duas rectas
		def showEstatistica2(listaAno,listaMaximo,listaMinimo,name,xLabel,yLabel,name1,name2):
			'''
			Param:
				listaAno - list
				listaMaximo - list
				listaMinimo - list
				name - string
				xLabel - string
				yLabel - string
				name1 - string
				name2 - string
			'''
			parte2.graf_recta2(listaAno,listaMaximo,listaMinimo,name,xLabel,yLabel,name2,name1)
		
		#estatisticas quando sao 2 listas			
		def showEstatistica3(listaMinimo,listaMaximo):
			'''
			Param:
				listaMaximo - list
				listaMinimo - list
			'''
			aweText=wx.StaticText(panel,-1, "Estatistica  de Renumeracao Minima: ",(3,10))
			aweText.SetForegroundColour('blue')
			aweText=wx.StaticText(panel,-1,"Media: %s" % ( parte2.media(listaMinimo)),(3,25))
			aweText=wx.StaticText(panel,-1,"Variancia: %s" % ( parte2.variancia(listaMinimo)),(3,40))
			aweText=wx.StaticText(panel,-1,"Desvio Medio: %s" % ( parte2.desvioMedio(listaMinimo)),(3,55))
			aweText=wx.StaticText(panel,-1,"Desvio Padrao: %s" % ( parte2.desvioPadrao(listaMinimo)),(3,70))
			aweText=wx.StaticText(panel,-1,"Coeficiente de variacao: %s" % ( parte2.variacao(listaMinimo)),(3,85))
			aweText=wx.StaticText(panel,-1, "Estatistica  de Renumeracao Maxima: ",(3,100))
			aweText.SetForegroundColour('blue')
			aweText=wx.StaticText(panel,-1,"Media: %s" % ( parte2.media(listaMaximo)),(3,115))
			aweText=wx.StaticText(panel,-1,"Variancia: %s" % ( parte2.variancia(listaMaximo)),(3,130))
			aweText=wx.StaticText(panel,-1,"Desvio Medio: %s" % ( parte2.desvioMedio(listaMaximo)),(3,145))
			aweText=wx.StaticText(panel,-1,"Desvio Padrao: %s" % ( parte2.desvioPadrao(listaMaximo)),(3,160))
			aweText=wx.StaticText(panel,-1,"Coeficiente de variacao: %s" % ( parte2.variacao(listaMaximo)),(3,175))
		
		#threads da estatistica e do grafico			
		def threadss(lista1,lista2,name,xLabel,yLabel):
			'''
			Param:
				lista1 - list
				lista2 - list
				name - string
				xlabel - string
				ylabel - sting
			'''
			try:
				thread.start_new_thread( showEstatistica1,(lista1,lista2,name,xLabel,yLabel)  )
				thread.start_new_thread( showEstatistica,(lista1,lista2,name,xLabel,yLabel) )
			except:
				print "Error: unable to start thread"
		
		#threads da estatistica e do grafico de quando sao selecionadas as listas da evolucao das renumeraçoes		
		def threadss1(listaAno,listaMaximo,listaMinimo):	
			'''
			Param:
				listaAno - list
				listaMaximo - list
				listaMinimo - string
			'''
			try:
				thread.start_new_thread( showEstatistica2,(listaAno,listaMinimo,listaMaximo,"evolucao Renumeracoes","ANO","renumeracoes","maximas","minimas"))
				thread.start_new_thread( showEstatistica3,(listaMinimo,listaMaximo) )
			except:
				print "Error: unable to start thread"
		
		
		'''
		lista selecionada na chooseOneBox
		'''					
		if estat=="IPC Global":
			threadss(listaAno,listaIpc,"Grafico do IPC","ANO","IPC")
									
		if estat=="Taxa Inflacao":
			threadss(listaAno,listaTaxa,"Taxa Inflacao","ANO","TAXA")
												
		if estat=="remuneracao minima mensal dos funcionarios":
			threadss(listaAno,listaMinimo,"Renumeracao minima","ANO","Renumercao")
									
		if estat=="remuneracao maxima mensal dos funcionarios":
			threadss(listaAno,listaMaximo,"Renumeracao maxima","ANO","Renumercao")
						
		if estat=="evolucao das remuneracoes":		
			threadss1(listaAno,listaMaximo,listaMinimo)				
						
		if estat=="(PIB) per capita":
			threadss(listaAno,listaPib,"Grafico do PIB","ANO","Pib")
							
		if estat=="rendimento nacional anual bruto per capita":
			threadss(listaAno,listaNacional,"rendimento nacional","ANO","Rendimento")
							
		if estat=="rendimento disponivel anual bruto per capita":
			
			threadss(listaAno,listaDisponivel,"rendimento disponivel anual","ANO","rendimento")
											
		if estat=="remuneracoes per capita anuais":
			threadss(listaAno,listaRenumeracao,"renumeracoes per capita anual","ANO","renumeracoes")
																				
		self.SetMenuBar(menuBar)		
		self.Bind(wx.EVT_MENU,self.onQuit,exitItem)	
		#aqui mete as medidas da frame e da o titulo da frame			
		self.SetSize((400,300))
		self.SetTitle('Estatistica  de '+ estat)			
		#aqui mostra a frame
		self.Show()			
			
	def onQuit(self,e):
		#fecha a frame
		self.Close()
		
def main():		
	app=wx.App()
	WindowClass(None)
	app.MainLoop()
							
main()
